/*- * See the file LICENSE for redistribution information. * * Copyright (c) 2002-2006 * Sleepycat Software. All rights reserved. * * $Id: Transaction.java,v 1.1 2006/05/06 08:59:31 ckaestne Exp $ */ package com.sleepycat.je; import com.sleepycat.je.txn.Locker; import com.sleepycat.je.txn.Txn; import com.sleepycat.je.utilint.PropUtil; /** * Javadoc for this public class is generated * via the doc templates in the doc_src directory. */ public class Transaction { private Txn txn; private Environment env; private long id; private String name; /** * Creates a transaction. */ Transaction(Environment env, Txn txn) { this.env = env; this.txn = txn; /* * Copy the id to this wrapper object so the id will be available * after the transaction is closed and the txn field is nulled. */ this.id = txn.getId(); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void abort() throws DatabaseException { checkEnv(); env.removeReferringHandle(this); txn.abort(false); // no sync required /* Remove reference to internal txn, so we can reclaim memory. */ txn = null; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public long getId() throws DatabaseException { return id; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void commit() throws DatabaseException { checkEnv(); env.removeReferringHandle(this); txn.commit(); /* Remove reference to internal txn, so we can reclaim memory. */ txn = null; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void commitSync() throws DatabaseException { doCommit(Txn.TXN_SYNC); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void commitNoSync() throws DatabaseException { doCommit(Txn.TXN_NOSYNC); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void commitWriteNoSync() throws DatabaseException { doCommit(Txn.TXN_WRITE_NOSYNC); } private void doCommit(byte commitType) throws DatabaseException { checkEnv(); env.removeReferringHandle(this); txn.commit(commitType); /* Remove reference to internal txn, so we can reclaim memory. */ txn = null; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void setTxnTimeout(long timeOut) throws DatabaseException { checkEnv(); txn.setTxnTimeout(PropUtil.microsToMillis(timeOut)); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void setLockTimeout(long timeOut) throws DatabaseException { checkEnv(); txn.setLockTimeout(PropUtil.microsToMillis(timeOut)); } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public void setName(String name) { this.name = name; } /** * Javadoc for this public method is generated via * the doc templates in the doc_src directory. */ public String getName() { return name; } public int hashCode() { return (int) id; } public boolean equals(Object o) { if (o == null) { return false; } if (!(o instanceof Transaction)) { return false; } if (((Transaction) o).id == id) { return true; } return false; } public String toString() { StringBuffer sb = new StringBuffer(); sb.append("<Transaction id=\""); sb.append(txn.getId()).append("\""); if (name != null) { sb.append(" name=\""); sb.append(name).append("\""); } sb.append(">"); return sb.toString(); } /** * This method should only be called by the LockerFactory.getReadableLocker * and getWritableLocker methods. The locker returned does not enforce the * readCommitted isolation setting. */ Locker getLocker() throws DatabaseException { if (txn == null) { throw new DatabaseException("Transaction " + id + " has been closed and is no longer"+ " usable."); } else { return txn; } } /* * Helpers */ Txn getTxn() { return txn; } /** * @throws RunRecoveryException if the underlying environment is invalid. */ private void checkEnv() throws RunRecoveryException { env.getEnvironmentImpl().checkIfInvalid(); } }